<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<script>
  function Base(props) {
    console.log('父类的构造', props);
    this.props = props;// this指向父类 改变this指向
  }

  Base.prototype.sayBase = function () {
    return 1;
  };

  function A(props) {
    /*寄生式继承*/
    Base.call(this,props);// 改变了父类的this指向
  }

  A.prototype.sayA = function () {
    return 2;
  };

  /*********************华丽丽的分割线*************************/

  /**************************原型继承*************************/
  /*此方法可以实现继承但是 父类的构造 不走*/
  // A.prototype.__proto__ = Base.prototype;
  /*此方法也有缺陷 缺陷 : 1. 父类收不到值  此时new 子类的时候调用父类的构造
  *
  function A(props) {
    Base(props);
  }
  * 此时 父类走了2次
  *
  * */
  // A.prototype.__proto__ = new Base();

  /* 组合继承*/
  /*Object.create(Base.prototype); 把父类的原型拷贝给子类的原型的隐式原型*/
  /* 此时的继承方式叫寄生式继承*/
  A.prototype.__proto__ = Object.create(Base.prototype);


  console.log(new A(8).sayBase());
  console.log(new A(9).sayA());
  console.log(new A(10).props);
  console.dir(A)

  /*
  * 1. 可以调用父类的构造 并且可以传值
  * 2. 可以调用父类的属性和方法
  *
  * */

</script>
</body>
</html>
